package com.note.feng.leetcode.algorithms.easy.nine;

public class NineHundredSeventeen {
    /**
     * 917 仅仅反转字母
     * 给你一个字符串 s ，根据下述规则反转字符串：
     *
     * 所有非英文字母保留在原有位置。
     * 所有英文字母（小写或大写）位置反转。
     * 返回反转后的 s 。
     *
     * 示例 1：
     *
     * 输入：s = "ab-cd"
     * 输出："dc-ba"
     * 示例 2：
     *
     * 输入：s = "a-bC-dEf-ghIj"
     * 输出："j-Ih-gfE-dCba"
     * 示例 3：
     *
     * 输入：s = "Test1ng-Leet=code-Q!"
     * 输出："Qedo1ct-eeLg=ntse-T!"
     *
     * 提示
     *
     * 1 <= s.length <= 100
     * s 仅由 ASCII 值在范围 [33, 122] 的字符组成
     * s 不含 '\"' 或 '\\'
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/reverse-only-letters
     */
    /**
     * 解法：双指针
     * 找到字符串左右两边的字符串，交换
     * @param s
     * @return
     */
    public String reverseOnlyLetters(String s) {
        int left = 0,right = s.length() - 1;
        char [] chars = s.toCharArray();
        while (left < right){
            while (left < right && !Character.isLetter(chars[left])){
                left ++;
            }
            while (left < right && !Character.isLetter(chars[right])){
                right --;
            }
            char c = chars[left];
            chars[left] = chars[right];
            chars[right] = c;
            left ++;
            right --;
        }
        return new String(chars);
    }
}
